@L}5 _$% l0$)$$Hȱ$ UhL" `e$$%`$%`  R@P!( L(1   Y I`  d  Ld M * @  $ % CC$$)%1 Udߥ$9%: !0 S$% DD˙`  }J)Lr 10 ; SOURCEB.084 LINE 8320 ;PLAYER MOVER UP, KEEPS TRACK OF Y VALUE AND WRAPS AROUND AT PRESCRIBED LIMITS OR STOPS. *2 BY}TE MOVE*30 *= $060040 PLAYADR = $CB ;PLAYER ADDRESS + Y VALUE50 YLOC = $D4 ;RETURN VARIABLE60 YHI = } $CD70 SIZE = $CF80 YLO = $CE90 PLA 0100 LDA #00110 STA YLOC+10120 PLA 0130 STA PLAYADR+1}0140 PLA 0150 STA PLAYADR ;ADDRESS OF PLAYER BEGINING ADDRESS0160 PLA 0170 PLA 0180 TAY ;PRE}SENT Y VALUE0190 STA YLOC0200 PLA 0210 PLA ;SIZE OF SHAPE0220 TAX 0230 INX ;FOR 2 BY }TE MOVE0240 STA SIZE ;FOR 2 BYTE MOVE0250 PLA 0260 PLA 0270 STA YLO ;LO TEST LIMIT0280 CMP YL }OC0290 BCS TEST ;IF YLO IS >= TO PRESENT Y LOCATION THEN WRAP0300 LOOP LDA (PLAYADR),Y ;TOP MOST BYTE OF P/M ON SCRE }EN0310 DEY 0320 DEY ;FOR 2 BYTE MOVE0330 STA (PLAYADR),Y ;NEXT BYTE LOWER IN MEMORY OR UP SCREEN0340 } INY 0350 INY 0360 INY ;NEXT BYTE TO MOVE0370 DEX 0380 BPL LOOP0390 DEC YLOC ;NEW Y VA }LUE0400 DEC YLOC ;FOR 2 BYTE MOVE0410 PLA 0420 PLA 0430 PLA 0440 PLA ;REMOVE FROM STACK, }NOT USED0450 DONE RTS 0460 TEST LDA YLOC0470 STA YLO ;FOR CORRECT WRAP WITH 2 BYTE MOVES0480 PLA 0490 PL}A 0500 STA YHI ;HI LIMIT0510 PLA 0520 PLA ;0=STOP AT LIMITS AND 1=WRAP0530 BEQ DONE0540 }LDA YHI0550 SEC 0560 SBC SIZE0570 STA YHI ;WHERE NEW SHAPE IS TO WRAP AROUND SCREEN0580 STA YLOC0590} LP2 LDY YLO0600 LDA (PLAYADR),Y0610 LDY YHI0620 STA (PLAYADR),Y0630 LDA #00640 LDY YLO0650 STA} (PLAYADR),Y ;ZERO OUT OLD PLAYER0660 INC YLO0670 INC YHI0680 DEX 0690 BPL LP20700 RTS 0650 STAq10 ; SOURCEC.084 LINE 8620 ;PLAYER MOVER DOWN WITH LOWER AND UPPER Y LIMITS AND WRAPING. 2 BYTE MOVE.30 *= $06}0040 PLAYADR = $CB ;PLAYER STARTING ADDRESS + Y LOCATION50 YLOC = $D4 ;RETURN VARIABLE60 YHI = $CD70 YLO } = $CE80 PLA 90 LDA #00100 STA YLOC+10110 PLA 0120 STA PLAYADR+10130 PLA 0140 STA PL}AYADR ;STARTING ADDRESS OF PLAYER0150 PLA 0160 PLA 0170 STA YLOC ;PRESENT Y LOCATION0180 PLA 0190 } PLA 0200 STA YHI ;HI LIMIT OR BOTTOM OF SCREEN0210 PLA 0220 PLA ;SIZE OF PLAYER SHAPE0230 TA}X 0240 INX ;FOR 2 BYTE MOVE0250 CLC 0260 ADC YLOC0270 CMP YHI0280 BCS TEST ;IF BOTTOM BYT}E OF FIGURE IS >= TO HI LIMIT THEN WRAP0290 TAY ;BOTTOM BYTE OF SHAPE +10300 DEY 0310 LOOP LDA (PLAYADR),Y} ;BOTTOM MOST BYTE OF P/M ON SCREEN0320 INY 0330 INY ;FOR 2 BYTE MOVE0340 STA (PLAYADR),Y ;NEXT BYTE H}IGHER IN MEMORY OR DOWN SCREEN0350 DEY 0360 DEY 0370 DEY ;FOR 2 BYTE MOVE0380 DEX 0390 BPL L}OOP0400 DONE INC YLOC0410 INC YLOC ;FOR 2 BYTE MOVE0420 PLA 0430 PLA 0440 PLA 0450 PLA ;}CLEAN STACK0460 RTS 0470 TEST LDA YLOC0480 STA YHI ;SET YHI DOWN IN MEMORY TO STARTING POSITION OF FIGURE0490} PLA 0500 PLA 0510 STA YLO ;LO Y LIMIT0520 STA YLOC ;NEW Y VALUE0530 PLA 0540 PLA 0550 } BEQ DONE ;0 =STOP AT LIMITS AND 1 =WRAP0560 LP2 LDY YHI0570 LDA (PLAYADR),Y0580 LDY YLO0590 STA (PLAYAD }R),Y0600 LDA #00610 LDY YHI0620 STA (PLAYADR),Y0630 INC YLO0640 INC YHI0650 DEX 0660 BPL L!}P20670 RTS #00610 LDY YHI0620 STA (PLAYADR),Y0630 INC YLO0640 INC YHI0650 DEX 0660 BPL L10 ; SOURCE.085 LINE 7020 ;SETS UP MISSILES.30 *= $060040 MISADR = $CB ;MISSILE SHAPE ADDRESS50 MASK = $#}CD60 PLDADR = $D4 ;FROM SETUP2.SRC70 LEN = $CF ;NUMBER OF BYTES IN MISSILE SHAPE80 TEMP = $D090 YHOLD = $} $D10100 HPOSM0 = 53252 ;HORIZONTAL POSITION OF MISSILE ZERO0110 SIZEM0 = 53256 ;HORIZONTAL SIZE OF MISSILE 00120 PL%}A 0130 PLA 0140 STA PLDADR+1 ;HI BYTE OF PMBASE0150 INC PLDADR+10160 PLA 0170 CLC 0180 ADC #128&}0190 STA PLDADR ;IF DOUBLE RESOLUTION THEN THIS IS START OF MISSILE ADDRESS0200 PLA 0210 PLA 0220 TAX '} ;WHICH MISSILE ,0-30230 TAY 0240 LDA #3 ;000000110250 DEY 0260 BMI GT10270 GT2 ASL A0280 (} ASL A0290 DEY 0300 BPL GT20310 GT1 STA MASK ;MASK OUT UNWANTED MISSILES0320 PLA 0330 STA MISADR+103)}40 PLA 0350 STA MISADR ;WHERE SHAPE DATA IS0360 PLA 0370 PLA 0380 STA HPOSM0,X ;HORIZONTAL POSITION *}REGISTER0390 PLA 0400 PLA 0410 STA SIZEM0,X ;HORIZONTAL SIZE, 0,1,30420 PLA 0430 PLA ;RESOLU+}TION0440 CMP #20450 BEQ DOUBLE0460 INC PLDADR+10470 INC PLDADR+10480 LDA #00490 STA PLDADR ;SI,}NGLE RESOLUTION MISSILE ADDRESS0500 DOUBLE LDA #00510 STA TEMP ;Y COUNTER0520 PLA 0530 PLA 0540 STA Y-}HOLD ;VERTICAL POSITION OF PLAYER WITHIN MEMORY BLOCK0550 PLA 0560 PLA 0570 TAX ;SIZE (HEIGHT) OF PL.}AYER IN BYTES0580 LOOP LDY TEMP0590 LDA (MISADR),Y ;GET MISSILE SHAPE DATA0600 AND MASK0610 INC TEMP0620 /} LDY YHOLD0630 STA (PLDADR),Y ;PUT MISSILE IN PM AREA0640 INC YHOLD0650 DEX 0660 BNE LOOP0670 RTS |10 ; SOURCEA.085 LINE 50020 ;NO FRILLS PLAYER MOVER UP, SINGLE RESOLUTION, ONE BYTE MOVE30 *= $060040 PLAYADR = $ 1}CB ;MISSILE ADDRESS + Y VALUE42 NUM1 = $CD43 NUM2 = $CE50 TEMP = $CF60 SIZE = $D1 ;POKED IN FROM BASI 2}C: VERTICAL SIZE OF P/M70 PLA 80 PLA 90 STA PLAYADR+10100 PLA 0110 STA PLAYADR ;ADDRESS OF P/M 3} STORAGE AREA + Y LOCATION0120 DEC PLAYADR ;SO Y DOES NOT NEED TO GO FROM 0 TO 2550130 PLA 0140 PLA 0150 4}TAX ;SIZE OF FIGURE0160 PLA 0170 PLA 0180 TAY ;MISSILE NO. 0-30190 LDA #3 ;00000011 5}0200 DEY ; 255-20210 BMI GT1 ;IF MISSILE 0 THEN USE 000000110220 GT2 ASL A0230 ASL A ;FOR OT 6}HER MISSILE NO.0240 DEY 0250 BPL GT20260 GT1 STA NUM1 ;TEMPORARY NO.0270 EOR #2550280 STA NUM20290 7} LDY #1 ;FIRST BYTE TO MOVE0300 LOOP LDA NUM10310 AND (PLAYADR),Y ;SOURCE BYTE0320 STA TEMP0330 DEY 0 8}340 LDA NUM20350 AND (PLAYADR),Y ;CLEAR TWO BITS OF INTEREST IN DESTINATION BYTE0360 ORA TEMP ;AND ADD ANY O 9}F THE TWO BYTES FROM SOURCE THAT SHOULD BE ON.0370 STA (PLAYADR),Y ;DESTINATION0380 INY 0390 INY 0400 DEX :} 0410 BPL LOOP0420 RTS HOULD BE ON.0370 STA (PLAYADR),Y ;DESTINATION0380 INY 0390 INY 0400 DEX "10 ; SOURCEB.085 LINE 51020 ; MISSILE MOVER DOWN, 1 BYTE MOVE.30 *= $060040 PLAYADR = $CB ;MISSILE STARTING A<}DDRESS50 NUM1 = $CD60 NUM2 = $CE70 TEMP = $CF80 SIZE = $D1 ;(212) POKED IN FROM BASIC: ACTUAL HEIGHT OF F=}IGURE90 PLA 0100 PLA 0110 STA PLAYADR+10120 PLA 0130 STA PLAYADR ;ADDRESS OF P/M STORAGE AREA + Y >}LOCATION0140 DEC PLAYADR0150 PLA 0160 PLA 0170 TAY ;VERTICAL SIZE OF PLAYER0180 PLA 0190 ?} PLA 0200 TAX ;MISSILE NUMBER 0-30210 LDA #3 ;000000110220 DEX 0230 BMI GT1 ;IF MISSILE@} 0 THEN USE 000000110240 GT2 ASL A0250 ASL A0260 DEX 0270 BPL GT20280 GT1 STA NUM1 ;TEMPORARY NO.0290 A} EOR #2550300 STA NUM20310 LOOP LDA NUM10320 AND (PLAYADR),Y ;SOURCE BYTE WITH TWO BITS OF INTEREST NOT ZEROED.0B}330 STA TEMP ;TEMP STORAGE0340 INY 0350 LDA NUM20360 AND (PLAYADR),Y ;CLEAR TWO BITS OF INTEREST IN DESC}TINATION BYTE.0370 ORA TEMP ;AND ADD ANY OF TE TWO BYTES FROM SOURCE THATSHOULD BE ON.0380 STA (PLAYADR),Y ;NEXTD} BYTE LOWER IN MEMORY.0390 DEY 0400 DEY 0410 BPL LOOP0420 RTS OULD BE ON.0380 STA (PLAYADR),Y ;NEXTS10 ; SOURCEC.085 LINE 60020 ;MISSILE MOVER UP, TWO BYTE MOVE.30 *= $060040 PLAYADR = $CB ;MISSILE ADDRESS + YF} VALUE50 NUM1 = $CD60 NUM2 = $CE70 TEMP = $CF80 SIZE = $D1 ;POKED IN FROM BASIC: VERTICAL SIZE OF P/M90 G} PLA 0100 PLA 0110 STA PLAYADR+10120 PLA 0130 STA PLAYADR ;ADDRESS OF P/M STORAGE AREA + Y LOCATIONH}0140 DEC PLAYADR ;SO Y DOES NOT NEED TO GO FROM 0 TO 2550150 DEC PLAYADR0160 PLA 0170 PLA 0180 TAX I} ;SIZE OF FIGURE0190 INX 0200 PLA 0210 PLA 0220 TAY ;MISSILE NO. 0-30230 LDA #3 ;0J}00000110240 DEY ; 255-20250 BMI GT1 ;IF MISSILE 0 THEN USE 000000110260 GT2 ASL A0270 ASL A K} ;FOR OTHER MISSILE NO.0280 DEY 0290 BPL GT20300 GT1 STA NUM1 ;TEMPORARY NO.0310 EOR #2550320 STA NUML}20330 LDY #2 ;FIRST BYTE TO MOVE0340 LOOP LDA NUM10350 AND (PLAYADR),Y ;SOURCE BYTE0360 STA TEMP0370 M} DEY 0380 DEY 0390 LDA NUM20400 AND (PLAYADR),Y ;CLEAR TWO BITS OF INTEREST IN DESTINATION BYTE0410 ORA N}TEMP ;AND ADD ANY OF THE TWO BYTES FROM SOURCE THAT SHOULD BE ON.0420 STA (PLAYADR),Y ;DESTINATION0430 INY 0440O} INY 0450 INY 0460 DEX 0470 BPL LOOP0480 RTS 420 STA (PLAYADR),Y ;DESTINATION0430 INY 0440F10 ; SOUCED.085 LINE 61020 ;MISSILE MOVER DOWN, 2 BYTE MOVE.30 *= $060040 PLAYADR = $CB ;MISSILE STARTING ADDQ}RESS.50 NUM1 = $CD60 NUM2 = $CE70 TEMP = $CF80 PLA 90 PLA 0100 STA PLAYADR+10110 PLA 012R}0 STA PLAYADR ;ADDRESS OF P/M STORAGE AREA + Y LOCATION0130 DEC PLAYADR0140 DEC PLAYADR0150 PLA 0160 S}PLA 0170 TAY ;VERTICAL SIZE OF PLAYER0180 PLA 0190 PLA 0200 TAX ;MISSILE NUMBER 0-30210 T} LDA #3 ;000000110220 DEX 0230 BMI GT1 ;IF MISSILE 0 THEN USE 000000110240 GT2 ASL A0250 ASL A02U}60 DEX 0270 BPL GT20280 GT1 STA NUM1 ;TEMPORARY NO.0290 EOR #2550300 STA NUM20310 INY 0320 LOOP V}LDA NUM10330 AND (PLAYADR),Y ;SOURCE BYTE WITH TWO BITS OF INTEREST NOT ZEROED.0340 STA TEMP ;TEMP STORAGE0350 W} INY 0360 INY 0370 LDA NUM20380 AND (PLAYADR),Y ;CLEAR TWO BITS OF INTEREST IN DESTINATION BYTE.0390 OX}RA TEMP ;AND ADD ANY OF TE TWO BYTES FROM SOURCE THATSHOULD BE ON.0400 STA (PLAYADR),Y ;NEXT BYTE LOWER IN MEMORY.04Y}10 DEY 0420 DEY 0430 DEY 0440 BPL LOOP0450 RTS 00 STA (PLAYADR),Y ;NEXT BYTE LOWER IN MEMORY.04H10 ; SOURCE.08620 ; CLEAR P/M GRAPHICS30 SDMCTL = 55940 GRACTL = 5327750 PMBASE = $CC ;PMBASE STARTING ADDRESS60 [}LEN = $CD70 *= $060080 PLA 90 PLA 0100 STA PMBASE0110 INC PMBASE0120 PLA 0130 S\}TA PMBASE-1 ;STORE STARTING ADDRESS OF P/M TABLE0140 LDA SDMCTL0150 CMP #46 ;DOUBLE RESOLUTION?0160 BEQ GT]}10170 INC PMBASE0180 INC PMBASE ;MISSILE STARTING ADDRESS0190 LDX #50200 LDA #00210 STA LEN ;LE^}NGTH OF MEMORY TO CLEAR IN SINGLE RESOLUTION0220 BEQ START0230 GT1 LDA #1280240 STA PMBASE-1 ;MISSILE STARTING ADD_}RESS0250 STA LEN0260 LDX #2 ;LENGTH OF MEMORY TO CLEAR IN SINGLE RESOLUTION0270 START LDA #00280 TAY 02`}90 GT2 STA (PMBASE-1),Y0300 INY 0310 BNE GT20320 INC PMBASE0330 DEX 0340 BNE GT20350 LDX LEN a} ;NOW FOR LOW BYTE0360 BEQ DONE0370 GT3 STA (PMBASE-1),Y0380 INY 0390 DEX 0400 BNE GT30410 DONE STA GRb}ACTL ;DIS-ABLE P/M0420 LDY #330430 INY ;TO PREVENT CHARACTER 34 IN STRING FROM APPEARING0440 STY SDMCTc}L ;REGULAR SCREEN0450 RTS 330430 INY ;TO PREVENT CHARACTER 34 IN STRING FROM APPEARING0440 STY SDMCT!10 ;SOURCE.087 LINE 11020 ; ONE PLAYER, VBI SETUP ROUTINE.30 *= $060040 SETVBV = $E45C50 PMBASE = $CB60 VBIAD e}R = $CD ;ADDRESS OF VBI ROUTINE STRING70 *= $060080 PLA 90 PLA 0100 STA PMBASE+1 ;PMBASE HI B f}YTE0110 PLA 0120 STA PMBASE0130 TAY 0140 PLA 0150 PLA 0160 STA (PMBASE),Y ;SIZE0170 INY g} ;10180 PLA 0190 PLA 0200 STA (PMBASE),Y ;X LOCATION0210 INY ;20220 PLA 0230 PLA h}0240 STA (PMBASE),Y ;PRESENT Y LOCATION0250 PLA 0260 STA VBIADR+1 ;SOURCE FOR VBI ROUTINE LESS THE NUMBER OF ME i}MORY LOCATIONS RESERVED ABOVE WHICH = 30270 PLA 0280 STA VBIADR ;FOR INDIRECT ADDRESSING0290 PLA 0300 PL j}A 0310 TAX ;LENGTH OF VBI STRING0320 INY ;NEXT OPEN AREA FOR VBI$ ROUTINE0330 LOOP LDA (VBIADR),Y k}0340 STA (PMBASE),Y ;INSTALL VBI0350 INY 0360 DEX 0370 BNE LOOP0380 LDY #3 ;LO BYTE OF START OF l}VBI ROUTINE0390 LDX PMBASE+1 ;HI BYTE0400 LDA #7 ;DEFERRED VECTOR0410 JSR SETVBV0420 RTS START OF s10 ;SOURCEA.087 LINES 90 & 100.20 ; VBI ROUTINE, ONE PLAYER.30 RETURN = $E46240 STICK0 = $027850 HPOSP0 = 53248 ;$n}HORIZONTAL POSITION OF PLAYER 060 PMBASE = $CB ;TO BE POKED IN LATER70 PLAY0 = $CD ;TO BE POKED IN LATER80 SIZE$o} = $CF90 *= $06000100 CLD 0110 LDA PMBASE0120 STA PLAY00130 LDA PMBASE+10140 CLC 0150 $p} ADC #40160 STA PLAY0+1 ;PLAYER 0 ADRESS0170 LDY STICK0 ;JOYSTICK VALUE0180 TYA 0190 AND #10200 BE$q}Q UP0210 TYA 0220 AND #20230 BEQ DOWN0240 TYA 0250 AND #40260 BEQ LEFT0270 TYA 0280 A$r}ND #80290 BEQ RIGHT0300 EXIT JMP RETURN ;DONE, OR JOYSTICK IN NUETRAL POSITION0310 UP LDY #00320 LDA (PMBASE),Y$s}0330 TAX ;SIZE0340 INY 0350 INY 0360 LDA (PMBASE),Y ;Y VALUE0370 SEC 0380 SBC #10390 $t} STA (PMBASE),Y ;NEW Y VALUE0400 TAY ;Y LOCATION0410 INY 0420 LOOP LDA (PLAY0),Y ;GET DATA0430 DEY $u}0440 STA (PLAY0),Y0450 INY 0460 INY 0470 DEX 0480 BPL LOOP0490 JMP RETURN0500 DOWN LDY #00510 $v} LDA (PMBASE),Y0520 STA SIZE0530 TAX 0540 INY 0550 INY 0560 LDA (PMBASE),Y ;Y VALUE0570 CLC $w}0580 ADC #10590 STA (PMBASE),Y ;NEW Y VALUE0600 ADC SIZE0610 TAY 0620 DEY 0630 DEY 0640 LP1 LD$x}A (PLAY0),Y ;GET DATA0650 INY 0660 STA (PLAY0),Y ;NEXT HIGHER BYTE0670 DEY 0680 DEY 0690 DEX 0700 $y} BPL LP10710 JMP RETURN0720 RIGHT LDY #1 ;FOR X VALUE0730 LDA (PMBASE),Y0740 CLC 0750 ADC #10760 $z} STA (PMBASE),Y0770 STA HPOSP00780 JMP RETURN0790 LEFT LDY #10800 LDA (PMBASE),Y0810 SEC 0820 SBC${} #10830 STA (PMBASE),Y0840 STA HPOSP00850 JMP RETURNLDY #10800 LDA (PMBASE),Y0810 SEC 0820 SBC$D10 ;SOURCE.088 LINE 12020 ; VBI SETUP ROUTINE. TWO PLAYERS30 *= $060040 SETVBV = $E45C50 PMBASE = $CB60 VBI(}}ADR = $CD ;ADDRESS OF VBI ROUTINE STRING70 *= $060080 PLA 90 PLA 0100 STA PMBASE+1 ;HI BYTE O(~}F PMBASE0110 PLA 0120 STA PMBASE0130 TAY 0140 LDX #2 ;TEMPORARY COUNTER0150 JOY2 PLA 0160 PLA (}0170 STA (PMBASE),Y ;SIZE0180 INY ;10190 PLA 0200 PLA 0210 STA (PMBASE),Y ;X LOCATION0220 (} INY ;20230 PLA 0240 PLA 0250 STA (PMBASE),Y ;PRESENT Y LOCATION0260 INY ;30270 DE(}X 0280 BNE JOY2 ;GET 2ND JOYSTICK DATA0290 PLA 0300 STA VBIADR+1 ;SOURCE FOR VBI ROUTINE LESS THE NUMBER OF(} MEMORY LOCATIONS RESERVED0310 PLA 0320 STA VBIADR ;FOR INDIRECT ADDRESSING0330 PLA 0340 PLA 0350 T(}AX ;LENGTH OF VBI STRING0360 LOOP LDA (VBIADR),Y0370 STA (PMBASE),Y ;INSTALL VBI0380 INY 0390 DEX 04(}00 BNE LOOP0410 LDY #6 ;LO BYTE OF VBI ROUTINE AFTER SKIPPING ABOVE DATA0420 LDX PMBASE+1 ;HI BYTE0430 (} LDA #7 ;DEFERRED VECTOR0440 JSR SETVBV0450 RTS R SKIPPING ABOVE DATA0420 LDX PMBASE+1 ;HI BYTE0430 (A10 ;SOURCEA.088 LINES 100 & 11020 ;VBI ROUTINE, TWO PLAYERS.30 RETURN = $E46240 STICK0 = $027850 STICK1 = $027960 ,}HPOSP0 = 53248 ;HORIZONTAL POSITION OF PLAYER 070 PMBASE = $CB ;TO BE POKED IN LATER80 PLAY0 = $CD ;TO BE POK,}ED IN LATER90 SIZE = $CF0100 JOY = $D00110 *= $06000120 CLD 0130 LDA PMBASE0140 STA PLAY00150 ,} LDA PMBASE+10160 CLC 0170 ADC #40180 STA PLAY0+1 ;PLAYER 0 ADDRESS0190 LDY STICK00200 LDA #00210 ,} STA JOY ;JOYSTICK 0 FIRST0220 BEQ JOY00230 JOY1 LDY STICK10240 INC PMBASE0250 INC PMBASE0260 INC,} PMBASE ;SET UP FOR JOY 20270 INC PLAY0+1 ;SET UP FOR JOY 20280 JOY0 TYA 0290 AND #10300 BEQ UP0310 TYA,} 0320 AND #20330 BEQ DOWN0340 TYA 0350 AND #40360 BEQ LEFT0370 TYA 0380 AND #80390 BE,}Q RIGHT0400 BNE DONE0410 UP LDY #00420 LDA (PMBASE),Y0430 TAX ;SIZE0440 INY 0450 INY 0460,} LDA (PMBASE),Y ;Y VALUE0470 SEC 0480 SBC #10490 STA (PMBASE),Y ;NEW Y VALUE0500 TAY ;Y LOCAT,}ION0510 INY 0520 LOOP LDA (PLAY0),Y ;GET DATA0530 DEY 0540 STA (PLAY0),Y0550 INY 0560 INY 0570 ,} DEX 0580 BPL LOOP0590 DONE INC JOY0600 LDA JOY0610 CMP #10620 BEQ JPY1 ;NEXT JOYSTICK0630 DEC P,}MBASE0640 DEC PMBASE0650 DEC PMBASE0660 DEC PLAY0+1 ;RETURN TO STARTING VALUES FOR JOYSTICK 10670 JMP RET,}URN ;EXIT0680 DOWN LDY #00690 LDA (PMBASE),Y0700 STA SIZE0710 TAX 0720 INY 0730 INY 0740 LDA ,}(PMBASE),Y ;Y VALUE0750 CLC 0760 ADC #10770 STA (PMBASE),Y ;NEW Y VALUE0780 ADC SIZE0790 TAY 0800 ,} DEY 0810 DEY 0820 LP1 LDA (PLAY0),Y ;GET DATA0830 INY 0840 STA (PLAY0),Y ;NEXT HIGHER BYTE0850 DEY 0,}860 DEY 0870 DEX 0880 BPL LP10890 BMI DONE0900 RIGHT LDY #1 ;FOR X VALUE0910 LDX JOY ;FOR COR,}RECT JOYSTICK0920 LDA (PMBASE),Y0930 CLC 0940 ADC #10950 STA (PMBASE),Y0960 STA HPOSP0,X0970 CL,}C 0980 BCC DONE0990 LEFT LDY #11000 LDX JOY ;FOR CORRECT JOYSTICK1010 LDA (PMBASE),Y1020 SEC 1030 ,} SBC #11040 STA (PMBASE),Y1050 STA HPOSP0,X1060 CLC 1070 BCC DONE LDA (PMBASE),Y1020 SEC 1030 ,X10 ;SOURCE.089 LINE 7020 ;VBI SETUP ROUTINE. ONE PLAYER WITH WRAP AROUND OR STOP LIMITS.30 *= $060040 SETVBV = $0}E45C50 PMBASE = 153660 XLIML = 153870 XLIMH = 153980 YLIML = 154090 YLIMH = 15410100 SIZE = 15430110 XLOC = 0} 15440120 YLOC = 15450130 WRAP = 15420140 JUMPH = 1546 ;HORIZONTAL JUMP AMOUNT0150 *= $06000160 PLA 0170 0} PLA 0180 STA PMBASE+1 ;HI BYTE0190 TAX ;FOR VBI ROUTINE0200 PLA 0210 STA PMBASE0220 TAY 0}0230 PLA 0240 PLA 0250 STA XLIML0260 PLA 0270 PLA 0280 STA XLIMH0290 PLA 0300 PLA 030}10 STA YLIML0320 PLA 0330 PLA 0340 STA YLIMH0350 PLA 0360 PLA 0370 STA WRAP ;0 FOR STOP 0}AT LIMITS AND 1 FOR WRAP AROUND0380 PLA 0390 PLA 0400 STA SIZE0410 PLA 0420 PLA 0430 STA XLOC00}440 PLA 0450 PLA 0460 STA YLOC0470 PLA 0480 PLA 0490 STA JUMPH0500 LDA #7 ;DEFERRED VE0}CTOR0510 JSR SETVBV0520 RTS YLOC0470 PLA 0480 PLA 0490 STA JUMPH0500 LDA #7 ;DEFERRED VE0'10 ;SOURCEA.089 LINES 90-110.20 ;VBI ROUTINE. ONE PLAYER WITH WRAP OR STOP LIMITS. DATA IN PAGE SIX AND ROUTINE IN PMBAS4}E.30 RETURN = $E46240 STICK0 = $027850 HPOSP0 = 53248 ;HORIZONTAL POSITION OF PLAYER 060 PMBASE = $CB ;TO BE PO4}KED IN LATER70 PLAY0 = $CD ;TO BE POKED IN LATER80 SIZE = 154390 XLIML = 15380100 XLIMH = 15390110 YLIML = 154}400120 YLIMH = 15410130 XLOC = 15440140 YLOC = 15450150 WRAP = 1542 ;0 MEANS STOP AND 1 MEANS WRAP0160 YLTEMP = $C4}F0170 YHTEMP = $D00180 TEMP = $D10190 JUMPH = 1546 ;AMOUNT TO JUMP HORIZONTALLY0200 *= $35000210 LDA 1536 4} ;LO OF PMBASE0220 STA PMBASE0230 STA PLAY00240 LDA JUMPH0250 STA TEMP0260 LDA 15370270 STA PM4}BASE+1 ;FOR PAGE ZERO ADDRESSING0280 CLC 0290 ADC #40300 STA PLAY0+1 ;PLAYER 0 ADDRESS0310 LDY STICK0 ;J4}OYSTICK VALUE0320 TYA 0330 AND #10340 BEQ UP0350 TYA 0360 AND #20370 BEQ DOWN0380 TYA 0394}0 AND #40400 BEQ LEFT0410 TYA 0420 AND #80430 BEQ RIGHT0440 EXIT JMP RETURN ;DONE, OR JOYSTICK IN NU4}ETRAL POSITION0450 UP LDX SIZE0460 LDY YLOC0470 CPY YLIML ;HAVE WE REACHED THE LOW LIMIT?0480 BEQ TESTUP04}490 DEC YLOC ;NEW YLOC VALUE0500 LOOP LDA (PLAY0),Y ;GET DATA0510 DEY 0520 STA (PLAY0),Y0530 INY 05404} INY 0550 DEX 0560 BPL LOOP0570 JMP RETURN0580 DOWN LDX SIZE0590 LDA YLOC0600 CMP YLIMH0610 4} BEQ TESTD ;HAVE WE REACHED THE HIGH LIMIT?0620 INC YLOC0630 CLC 0640 ADC SIZE0650 TAY 0660 DEY 4}0670 LP1 LDA (PLAY0),Y ;GET DATA0680 INY 0690 STA (PLAY0),Y ;NEXT HIGHER BYTE0700 DEY 0710 DEY 0720 4}DEX 0730 BPL LP10740 JMP RETURN0750 RIGHT LDX XLOC0760 CPX XLIMH0770 BCS TESTR ;IF => THEN WRAP0780 G4}T9 INX 0790 DEC TEMP0800 BNE GT9 ;NEW X VALUE0810 GT2 STX XLOC0820 STX HPOSP00830 GT1 JMP RETURN0840 TE4}STR LDA WRAP0850 BEQ GT10860 LDX XLIML0870 CLC 0880 BCC GT20890 LEFT LDX XLOC0900 CPX XLIML0910 4} BCC TESTL0920 BEQ TESTL0930 GT8 DEX 0940 DEC TEMP0950 BNE GT8 ;JUMP HORIZONTALLY0960 CLC 0970 4} BCC GT20980 TESTL LDA WRAP0990 BEQ GT11000 LDX XLIMH1010 CLC 1020 BCC GT21030 TESTUP LDA WRAP1040 4} BEQ GT1 ;STOP AT LIMITS1050 LDA YLIMH1060 STA YLOC1070 STA YHTEMP1080 LDA YLIML1090 STA YLTEMP4}1100 UP1 LDY YLTEMP1110 LDA (PLAY0),Y ;GET DATA1120 LDY YHTEMP1130 STA (PLAY0),Y ;NEW LOCATION1140 LDA #04}1150 LDY YLTEMP1160 STA (PLAY0),Y ;ZERO OUT OLD LOC.1170 INC YLTEMP1180 INC YHTEMP1190 DEX 1200 4} BPL UP11210 JMP RETURN1220 TESTD LDA WRAP1230 BEQ GT1 ;STOP AT LIMITS1240 LDA YLIML1250 STA YLOC124}60 STA YLTEMP1270 LDA YLIMH1280 STA YHTEMP1290 DN1 LDY YHTEMP1300 LDA (PLAY0),Y1310 LDY YLTEMP1320 4} STA (PLAY0),Y ;NEW LOCATION1330 LDA #01340 LDY YHTEMP1350 STA (PLAY0),Y ;ZERO OUT OLD LOC.1360 INC YL4}TEMP1370 INC YHTEMP1380 DEX 1390 BPL DN11400 JMP RETURN STA (PLAY0),Y ;ZERO OUT OLD LOC.1360 INC YL4L10 ;SOURCE.090 LINES 90-11020 ;VBI ROUTINE. ONE PLAYER WITH WRAP OR STOP LIMITS. DATA IN PAGE SIX AND ROUTINE IN PMBASE 8}** 2 BYTE MOVE **30 RETURN = $E46240 STICK0 = $027850 HPOSP0 = 53248 ;HORIZONTAL POSITION OF PLAYER 060 PMBASE = $C8}B ;TO BE POKED IN LATER70 PLAY0 = $CD ;TO BE POKED IN LATER80 SIZE = 154390 XLIML = 15380100 XLIMH = 15398}0110 YLIML = 15400120 YLIMH = 15410130 XLOC = 15440140 YLOC = 15450150 WRAP = 1542 ;0 MEANS STOP AND 1 MEANS WRAP08}160 JUMPH = 15460170 YLTEMP = $CF0180 YHTEMP = $D00190 TEMP = $D10200 *= $35000210 LDA 1536 ;LO OF PMBASE08}220 STA PMBASE0230 STA PLAY00240 LDA JUMPH0250 STA TEMP0260 LDA 15370270 STA PMBASE+1 ;FOR PAGE 8}ZERO ADDRESSING0280 CLC 0290 ADC #40300 STA PLAY0+1 ;PLAYER 0 ADDRESS0310 LDY STICK0 ;JOYSTICK VALUE0328}0 TYA 0330 AND #10340 BEQ UP0350 TYA 0360 AND #20370 BEQ DOWN0380 TYA 0390 AND #404008} BEQ LEFT0410 TYA 0420 AND #80430 BEQ RIGHT0440 EXIT JMP RETURN ;DONE, OR JOYSTICK IN NUETRAL POSITION048}50 UP LDX SIZE0460 LDY YLOC0470 CPY YLIML ;HAVE WE REACHED THE LOW LIMIT?0480 BCC TESTUP ;IF LESS THAN LIM8}IT0490 BEQ TESTUP ;OR = TO LIMIT0500 DEC YLOC ;NEW YLOC VALUE0510 DEC YLOC ;FOR 2 BYTE MOVE0520 IN8}X ;FOR 2 BYTE MOVE0530 LOOP LDA (PLAY0),Y ;GET DATA0540 DEY 0550 DEY ;FOR 2 BYTE MOVE0560 STA8} (PLAY0),Y0570 INY 0580 INY 0590 INY ;FOR 2 BYTE MOVE0600 DEX 0610 BPL LOOP0620 JMP RET8}URN0630 DOWN LDX SIZE0640 LDA YLOC0650 CMP YLIMH0660 BCS GT7 ;HAVE WE REACHED THE HIGH LIMIT?0670 IN8}C YLOC0680 INC YLOC ;FOR 2 BYTE MOVE0690 CLC 0700 ADC SIZE0710 TAY 0720 DEY 0730 INX 8} ;FOR 2 BYTE MOVE0740 LP1 LDA (PLAY0),Y ;GET DATA0750 INY 0760 INY ;FOR 2 BYTE MOVE0770 STA (PLAY0),Y8} ;NEXT HIGHER BYTE0780 DEY 0790 DEY 0800 DEY ;FOR 2 BYTE MOVE0810 DEX 0820 BPL LP10830 8}JMP RETURN0840 RIGHT LDX XLOC0850 CPX XLIMH0860 BCS TESTR0870 GT9 INX 0880 DEC TEMP0890 BNE GT90900 GT8}2 STX XLOC0910 STX HPOSP00920 GT1 JMP RETURN0930 TESTR LDA WRAP0940 BEQ GT10950 LDX XLIML0960 CLC 09708} BCC GT20980 LEFT LDX XLOC0990 CPX XLIML1000 BCC TESTL1010 BEQ TESTL1020 GT8 DEX 1030 DEC TEMP10408} BNE GT81050 CLC 1060 BCC GT21070 TESTL LDA WRAP1080 BEQ GT11090 LDX XLIMH1100 CLC 1110 BC8}C GT21120 GT7 BCS TESTD1130 TESTUP LDA WRAP1140 BEQ GT1 ;STOP AT LIMITS1150 LDA YLOC1160 STA YLTEMP11708} LDA YLIMH1180 STA YLOC1190 STA YHTEMP1200 UP1 LDY YLTEMP1210 LDA (PLAY0),Y ;GET DATA1220 LDY YHTEMP8}1230 STA (PLAY0),Y ;NEW LOCATION1240 LDA #01250 LDY YLTEMP1260 STA (PLAY0),Y ;ZERO OUT OLD LOC.1270 8}INC YLTEMP1280 INC YHTEMP1290 DEX 1300 BPL UP11310 JMP RETURN1320 TESTD LDA WRAP1330 BEQ GT1 ;S8}TOP AT LIMITS1340 LDA YLOC1350 STA YHTEMP ;SINCE YLOC COULD BE => TO YLIMH1360 LDA YLIML1370 STA YLOC138}80 STA YLTEMP1390 DN1 LDY YHTEMP1400 LDA (PLAY0),Y1410 LDY YLTEMP1420 STA (PLAY0),Y ;NEW LOCATION1430 8} LDA #01440 LDY YHTEMP1450 STA (PLAY0),Y ;ZERO OUT OLD LOC.1460 INC YLTEMP1470 INC YHTEMP1480 DEX 8}1490 BPL DN11500 JMP RETURN STA (PLAY0),Y ;ZERO OUT OLD LOC.1460 INC YLTEMP1470 INC YHTEMP1480 DEX 8%10 ;SOURCE.091 LINE 15020 ;VBI SETUP ROUTINE. TWO PLAYERS WITH WRAPPING.30 *= $060040 SETVBV = $E45C50 PMBAS<}E = 153660 XLIML = 154070 XLIMH = 154180 YLIML = 154290 YLIMH = 15430100 SIZE = 15440110 XLOC = 15450120 YL<}OC = 15460130 WRAP = 15380140 JUMPH = 15390150 TEMP = $CB0160 *= $06000170 PLA 0180 LDA #2550190 S<}TA TEMP0200 PLA 0210 STA PMBASE+1 ;HI BYTE0220 PLA 0230 STA PMBASE0240 TAY 0250 PLA 0260 P<}LA 0270 STA WRAP0280 LDX #0 ;FOR JOYSTICK ONE0290 PLA 0300 PLA 0310 STA JUMPH ;HORIZONTAL MOV<}EMENT AMOUNT0320 JOY1 PLA 0330 PLA 0340 STA XLIML,X0350 PLA 0360 PLA 0370 STA XLIMH,X0380 PLA <}0390 PLA 0400 STA YLIML,X0410 PLA 0420 PLA 0430 STA YLIMH,X0440 PLA 0450 PLA 0460 STA<} SIZE,X0470 PLA 0480 PLA 0490 STA XLOC,X0500 PLA 0510 PLA 0520 STA YLOC,X0530 LDX #7 <};NOW SET UP FOR 2ND JOYSTICK DATA FROM 1546 TO 15520540 INC TEMP0550 BEQ JOY1 ;GO FOR SECOND JOYSTICK0560 L<}DX #6 ;NOW PLACE JOY ONE VALUES IN A SAFE PLACE IN PAGE SIX FOR USE IN VBI ROUTINE0570 LOOP LDA 1540,X0580 STA 155<}4,X0590 DEX 0600 BPL LOOP0610 LDX PMBASE+1 ;HI BYTE0620 LDA #7 ;DEFERRED VECTOR0630 JSR SETVBV<}0640 RTS EX 0600 BPL LOOP0610 LDX PMBASE+1 ;HI BYTE0620 LDA #7 ;DEFERRED VECTOR0630 JSR SETVBV<10 ;SOURCEA.091 LINES 100-130.20 ;VBI ROUTINE. TWO PLAYERS WITH WRAP. DATA IN PAGE 6 AND ROUTINE IN PMBASE.30 RETUR@}N = $E46240 STICK0 = $027850 STICK1 = $027960 HPOSP0 = 53248 ;HORIZONTAL POSITION OF PLAYER 070 PMBASE = $CB ;@}TO BE POKED IN LATER80 PLAY0 = $CD ;TO BE POKED IN LATER90 SIZE = 15440100 XLIML = 15400110 XLIMH = 15410120 YL@}IML = 15420130 YLIMH = 15430140 XLOC = 15450150 YLOC = 15460160 WRAP = 1538 ;0 MEANS STOP AND 1 MEANS WRAP0170 JUM@}PH = 1539 ;HORIZONTAL MOVE AMOUNT0180 YLTEMP = $CF0190 YHTEMP = $D00200 JOY = 15610210 TEMP = $D10220 *= $350@}00230 LDA 1536 ;LO OF PMBASE0240 STA PMBASE0250 STA PLAY00260 LDA JUMPH0270 STA TEMP ;HORIZONT@}AL MOVE AMOUNT0280 LDA 15370290 STA PMBASE+1 ;FOR PAGE ZERO ADDRESSING0300 CLC 0310 ADC #40320 STA P@}LAY0+1 ;PLAYER 0 ADDRESS0330 LDY STICK0 ;JOYSTICK VALUE0340 LDA #00350 STA JOY0360 BEQ JOY00370 JOY1 LD@}Y #60380 LDA XLOC0390 STA 15590400 LDA YLOC0410 STA 1560 ;SINCE NEW VALUES0420 LDA JUMPH0430 @} STA TEMP ;RESTORE0440 LP3 LDA 1547,Y0450 STA 1540,Y0460 DEY 0470 BPL LP3 ;JOY1 DATA IN 1547 TO 1553 A@}ND NEED TO PLACE IN 1540 TO 15460480 LDY STICK1 ;SECOND JOYSTICK0490 INC PLAY0+1 ;2nd JOY IS ONE PAGE HIGHER IN ME@}MORY0500 JOY0 TYA 0510 AND #10520 BEQ UP0530 TYA 0540 AND #20550 BEQ DOWN0560 TYA 0570 AN@}D #40580 BEQ LFT0590 TYA 0600 AND #80610 BEQ RIGHT0620 BNE DONE0630 UP LDX SIZE0640 LDY YLOC@}0650 CPY YLIML ;HAVE WE REACHED THE LOW LIMIT?0660 BEQ TUP0670 DEC YLOC ;NEW YLOC VALUE0680 LOOP LDA (PLA@}Y0),Y ;GET DATA0690 DEY 0700 STA (PLAY0),Y0710 INY 0720 INY 0730 DEX 0740 BPL LOOP0750 BMI@} DONE0760 JY1 BEQ JOY10770 LFT BEQ LEFT0780 DOWN LDX SIZE0790 LDA YLOC0800 CMP YLIMH0810 BEQ JMP1 ;HAVE @}WE REACHED THE HIGH LIMIT?0820 INC YLOC0830 CLC 0840 ADC SIZE0850 TAY 0860 DEY 0870 LP1 LDA (PLAY0)@},Y ;GET DATA0880 INY 0890 STA (PLAY0),Y ;NEXT HIGHER BYTE0900 DEY 0910 DEY 0920 DEX 0930 BPL LP@}10940 BMI DONE0950 TUP BEQ TESTUP0960 RIGHT LDX XLOC0970 CPX XLIMH0980 BCS TESTR0990 GT9 INX 1000 DEC @}TEMP1010 BNE GT9 ;FOR HORIZONTAL MOVEMENT1020 GT2 STX XLOC1030 TXA 1040 LDY JOY1050 STA HPOSP0,Y106@}0 DONE INC JOY1070 LDA JOY1080 CMP #11090 BEQ JY1 ;NEXT JOYSTICK1100 LDA XLOC1110 STA 15521120 @} LDA YLOC1130 STA 1553 ;NEW 2ND JOY LOCATIONS1140 LDY #61150 LP4 LDA 1554,Y ;EXTRA STORAGE OF JOY0 DATA116@}0 STA 1540,Y1170 DEY 1180 BPL LP4 ;RESTORE JOY0 DATA IN 1540 TO 15461190 JMP RETURN1200 JMP1 BEQ TEST@}D1210 TESTR LDA WRAP1220 BEQ DONE1230 LDX XLIML1240 CLC 1250 BCC GT21260 LEFT LDX XLOC1270 CPX XLI@}ML1280 BCC TESTL1290 BEQ TESTL1300 GT8 DEX 1310 DEC TEMP1320 BNE GT8 ;FOR HORIZONTAL MOVE1330 C@}LC 1340 BCC GT21350 TESTL LDA WRAP1360 BEQ DONE1370 LDX XLIMH1380 BNE GT21390 TESTUP LDA WRAP1400 @}BEQ DONE ;STOP AT LIMITS1410 LDA YLIMH1420 STA YLOC1430 STA YHTEMP1440 LDA YLIML1450 STA YLTEMP1A}460 UP1 LDY YLTEMP1470 LDA (PLAY0),Y ;GET DATA1480 LDY YHTEMP1490 STA (PLAY0),Y ;NEW LOCATION1500 LDA #0A}1510 LDY YLTEMP1520 STA (PLAY0),Y ;ZERO OUT OLD LOC.1530 INC YLTEMP1540 INC YHTEMP1550 DEX 1560 A}BPL UP11570 GT3 BMI DONE1580 TESTD LDA WRAP1590 BEQ DONE ;STOP AT LIMITS1600 LDA YLIML1610 STA YLOC1620 A} STA YLTEMP1630 LDA YLIMH1640 STA YHTEMP1650 DN1 LDY YHTEMP1660 LDA (PLAY0),Y1670 LDY YLTEMP1680 A} STA (PLAY0),Y ;NEW LOCATION1690 LDA #01700 LDY YHTEMP1710 STA (PLAY0),Y ;ZERO OUT OLD LOC.1720 INC YLTEMA}P1730 INC YHTEMP1740 DEX 1750 BPL DN11760 BMI GT3 STA (PLAY0),Y ;ZERO OUT OLD LOC.1720 INC YLTEM@F10 ;SOURCE.092 LINE 20020 ; CLEARS VBI P/M ROUTINE IN 400/800 COMPUTERS.30 SDMCTL = 55940 GRACTL = 5327750 PMBASE = E}$CC ;PMBASE STARTING ADDRESS60 LEN = $CD70 SETVBV = $E45C80 *= $060090 PLA 0100 PLA 0110 E}STA PMBASE0120 INC PMBASE0130 PLA 0140 STA PMBASE-1 ;STORE STARTING ADDRESS OF P/M TABLE0150 LDA SDMCTL0E }160 CMP #46 ;DOUBLE RESOLUTION?0170 BEQ GT10180 INC PMBASE0190 INC PMBASE ;MISSILE STARTING ADDRESS0E }200 LDX #50210 LDA #00220 STA LEN ;LENGTH OF MEMORY TO CLEAR IN SINGLE RESOLUTION0230 BEQ START0240 GE }T1 LDA #1280250 STA PMBASE-1 ;MISSILE STARTING ADDRESS0260 STA LEN0270 LDX #2 ;LENGTH OF MEMORY TO CLEAR E }IN SINGLE RESOLUTION0280 START LDA #00290 TAY 0300 GT2 STA (PMBASE-1),Y0310 INY 0320 BNE GT20330 INC PME }BASE0340 DEX 0350 BNE GT20360 LDX LEN ;NOW FOR LOW BYTE0370 BEQ DONE0380 GT3 STA (PMBASE-1),Y0390 E} INY 0400 DEX 0410 BNE GT30420 DONE STA GRACTL ;DIS-ABLE P/M0430 LDX #330440 INX ;TO PREVENT CE}HARACTER 34 FROM APPEARING THE STRING0450 STX SDMCTL ;REGULAR SCREEN0460 LDX #2330470 LDY #62 ;DEFAULT VAE}LUE OF DEFERRED VBI VECTOR0480 LDA #7 ;FOR DEFERRED VECTOR0490 JSR SETVBV ;SET VECTOR0500 RTS EFAULT VADt10 ;SOURCEA.092 LINE 50020 ; CLEARS VBI P/M ROUTINES IN XL/XE COMPUTERS.30 SDMCTL = 55940 GRACTL = 5327750 PMBASE = I}$CC ;PMBASE STARTING ADDRESS60 LEN = $CD70 SETVBV = $E45C80 *= $060090 PLA 0100 PLA 0110 I}STA PMBASE0120 INC PMBASE0130 PLA 0140 STA PMBASE-1 ;STORE STARTING ADDRESS OF P/M TABLE0150 LDA SDMCTL0I}160 CMP #46 ;DOUBLE RESOLUTION?0170 BEQ GT10180 INC PMBASE0190 INC PMBASE ;MISSILE STARTING ADDRESS0I}200 LDX #50210 LDA #00220 STA LEN ;LENGTH OF MEMORY TO CLEAR IN SINGLE RESOLUTION0230 BEQ START0240 GI}T1 LDA #1280250 STA PMBASE-1 ;MISSILE STARTING ADDRESS0260 STA LEN0270 LDX #2 ;LENGTH OF MEMORY TO CLEAR I}IN SINGLE RESOLUTION0280 START LDA #00290 TAY 0300 GT2 STA (PMBASE-1),Y0310 INY 0320 BNE GT20330 INC PMI}BASE0340 DEX 0350 BNE GT20360 LDX LEN ;NOW FOR LOW BYTE0370 BEQ DONE0380 GT3 STA (PMBASE-1),Y0390 I} INY 0400 DEX 0410 BNE GT30420 DONE STA GRACTL ;DIS-ABLE P/M0430 LDX #330440 INX ;TO PREVENT CI}HARACTER 34 FROM APPEARING THE STRING0450 STX SDMCTL ;REGULAR SCREEN0460 LDX #1940470 LDY #138 ;DEFAULT VAI}LUE OF DEFERRED VBI VECTOR0480 LDA #7 ;FOR DEFERRED VECTOR0490 JSR SETVBV ;SET VECTOR0500 RTS EFAULT VAHt10 ;SOURCE.093 LINE 2020 ;STORES SEQUENCIAL NUMBERS IN MEMORY FROM 0 TO X (MAX.=256): SETS UP SOURCEA.093 ROUTINE.30M} STR = $CB40 STR2 = $CD50 COUNT = $CF60 *= $060070 PLA 80 PLA 90 STA STR+10100 PM}LA 0110 STA STR ;STRING TO PLACE SEQUENCIAL NUMBERS0120 PLA 0130 STA STR2+10140 PLA 0150 STA STRM}2 ;ADDRESS OF ANOTHER MEMORY AREA TO PLACE RANDOM NUMBER NON REPEATING. USED IN ANOTHER PROGRAM0160 PLA 0170 PLM }A 0180 TAY 0190 STA COUNT ;THE NUMBER OF NUMBERS TO RANDOMIZE0200 DEC COUNT0210 LOOP DEY 0220 TYA 023M!}0 STA (STR),Y ;FILL STRING FROM END TO BEGINNING0240 BNE LOOP0250 RTS C COUNT0210 LOOP DEY 0220 TYA 023LU10 ;SOURCEA.093 LINE 4020 ;TAKES SEQUENCIAL NUMBERS IN A STRING AND RANDOMIZES THEM INTO ANOTHER STRING NON REPEQ#}ATING.30 ;REQUIRES SOURCE.093 FOR SETUP.40 STR = $CB50 STR2 = $CD60 COUNT = $CF70 *= $060080 PLA Q$}90 PLA 0100 PLA ;RANDOM NUMBER FROM BASIC WITHIN LENGTH OF PRESENT SEQUENTIAL NUMBER STRING.0110 TAYQ%} 0120 TAX ;TEMPORARY HOLD , LOCATION INDICATOR0130 LDA (STR),Y ;GET SEQUENCIAL NUMBER0140 LDY COUNT Q&};START FILLING NEW STRING FROM LAST TO FIRST0150 STA (STR2),Y0160 CPX COUNT ;IS LOCATION IN STRING THE LAST ONE SQ'}O DON'T HAVE TO SHIFT REST OF STRING DOWN ONE?0170 BEQ DONE0180 TXA 0190 TAY 0200 GT3 INY ;SET UP TO Q(}GET NEXT NUMBER IN STRING AND SHIFT DOWN ONE SPACE, THEREBY DELETING THE NUMBER CH0210 LDA (STR),Y0220 DEY 0230 Q)} STA (STR),Y ;SHIFT0240 INY 0250 CPY COUNT ;DONE YET?0260 BNE GT30270 DONE DEC COUNT ;ONE LESS STRING LENQ*}GTH0280 RTS FT0240 INY 0250 CPY COUNT ;DONE YET?0260 BNE GT30270 DONE DEC COUNT ;ONE LESS STRING LENP10 ;SOURCE.094 LINE 3020 ;ROTATES COLORS DOWN SCREEN.30 *= $060040 RTCLOK = 18 ;INCREMENTS BY ONE EVERY 4.27U,} SECONDS50 COLPF0 = 53270 ;REGISTER 70860 WSYNC = $D40A70 DELAY = $CB ;TIME TO HOLD ON SCREEN80 SIZE = $CC U-} ;WIDTH OF LINE90 PLA 0100 PLA 0110 PLA 0120 STA DELAY ;IN SECONDS0130 PLA 0140 PLA 015U.}0 STA SIZE ;LINE WIDTH, 1 IS WIDEST0160 PLA 0170 PLA ;0,1,2,3,4 FOR COLOR REGISTER ;708-7120180 U/} TAY 0190 LDA #255 ;WILL BE 0 AT GT10200 GT2 LDX #00210 STX RTCLOK+2 ;1/60 COUNTER0220 LDX #600230 GT1 CLU0}C 0240 ADC SIZE0250 STA WSYNC0260 STA COLPF0,Y0270 CPX RTCLOK+20280 BCS GT10290 DEC DELAY0300 U1} BNE GT20310 RTS STA WSYNC0260 STA COLPF0,Y0270 CPX RTCLOK+20280 BCS GT10290 DEC DELAY0300 T10 ; SOURCEA.094 LINE 7020 ;ROTATES COLORS DOWN SCREEN, COLOR BAR DENSITY OPPOSITE THAT OF SOURCE.094.30 *Y3}= $060040 RTCLOK = 18 ;INCREMENTS BY ONE EVERY 4.27 SECONDS50 COLPF0 = 53270 ;REGISTER 70860 WSYNC = $D40A70 Y4}DELAY = $CB ;TIME TO HOLD ON SCREEN80 SIZE = $CC ;WIDTH OF LINE90 PLA 0100 PLA 0110 PLA 0120 Y5} STA DELAY ;IN SECONDS0130 PLA 0140 PLA 0150 STA SIZE ;LINE WIDTH, 1 IS WIDEST0160 PLA 0170 Y6}PLA ;0,1,2,3,4 FOR COLOR REGISTER ;708-7120180 TAY 0190 LDA #1 ;WILL BE 0 AT GT10200 GT2 LDX #00210 Y7} STX RTCLOK+2 ;1/60 COUNTER0220 LDX #600230 GT1 SEC 0240 SBC SIZE0250 STA WSYNC0260 STA COLPF0,Y0270Y8} CPX RTCLOK+20280 BCS GT10290 DEC DELAY0300 BNE GT20310 RTS STA WSYNC0260 STA COLPF0,Y0270XU10 ; SOURCE.09520 ;ROTATES COLORS IN RANDOM FASHION.30 *= $060040 RTCLOK = 18 ;INCREMENTS BY ONE EVERY 4.27 S]:}ECONDS50 COLPF0 = 53270 ;REGISTER 70860 WSYNC = $D40A70 DELAY = $CB ;TIME TO HOLD ON SCREEN80 RANDOM = 53770];}90 PLA 0100 PLA 0110 PLA 0120 STA DELAY ;IN SECONDS0130 PLA 0140 PLA ;0,1,2,3,4 FOR ]<}COLOR REGISTER ;708-7120150 TAY 0160 LDX #600170 GT2 LDA #00180 STA RTCLOK+2 ;1/60 COUNTER0190 GT1 LDA RANDO]=}M0200 STA WSYNC0210 STA COLPF0,Y0220 CPX RTCLOK+20230 BCS GT10240 DEC DELAY0250 BNE GT20260 ]>} RTS STA WSYNC0210 STA COLPF0,Y0220 CPX RTCLOK+20230 BCS GT10240 DEC DELAY0250 BNE GT20260 \10 ; SOURCE.096 LINE 3020 ;DETERMINES IF A NUMBER IS LESS THAN, GREATER, OR EQUAL TO ANOTHER. MAX. SIZE OF NUMBERS ISa@} 255.30 *= $060040 PLA 50 LDA #260 STA $D470 LDA #080 STA $D590 PLA 0100 aA} PLA 0110 TAY 0120 PLA 0130 PLA 0140 STA $CB0150 CPY $CB0160 BEQ GT10170 BCS GT20180 aB} DEC $D40190 GT1 RTS 0200 GT2 INC $D40210 RTS STA $CB0150 CPY $CB0160 BEQ GT10170 BCS GT20180 `710 ; SOURCEA.096 LINE 8020 ;DETERMINES IF A NUMBER IS LESS THAN, GREATER, OR EQUAL TO ANOTHER, FOR NUMBERS UP TO 65535.3eD}0 *= $060040 PLA 50 LDA #260 STA $D470 LDA #080 STA $D590 PLA 0100 TAX eE}0110 PLA 0120 TAY 0130 PLA 0140 STA $CB0150 PLA 0160 STA $CC0170 CPX $CB0180 BEQ GT1eF}0190 BCS GT20200 GT4 DEC $D40210 RTS 0220 GT2 INC $D40230 GT3 RTS 0240 GT1 CPY $CC0250 BEQ GT30260 BCSeG} GT20270 BCC GT4GT4 DEC $D40210 RTS 0220 GT2 INC $D40230 GT3 RTS 0240 GT1 CPY $CC0250 BEQ GT30260 BCSd10 ; SOURCE.09720 ;BLINK CURSOR AND ANY INVERSE CHARACTER.30 *= $060040 SETVBV = $E45C50 SYSVBV = $E45F60 CHACTiI} = 755 ;CHARACTER MODE REGISTER70 PLA 80 PLA 90 TAX 0100 PLA 0110 CLC 0120 ADC #17 iJ} ;VB ROUTINE 17 BYTES INTO THIS STRING0130 TAY 0140 BCC GT10150 INX 0160 GT1 LDA #6 ;IMMEDIATE MODE0iK}170 JSR $E45C0180 RTS 0190 LDA $140200 ROR CHACT0210 ROR CHACT0220 ROR A0230 ROR A0240 iL} ROR A0250 ROR A0260 ROL CHACT0270 ROL CHACT0280 JMP SYSVBV CHACT0220 ROR A0230 ROR A0240 hP10 ; SOURCE.09820 ;RETURNS LO BYTE IN RETURN VARIABLE AND HI IN PEEK(208)30 *= $060040 PLA 50 PLA 60 mN} STA 20870 PLA 80 STA 21290 LDA #00100 STA 2130110 RTS 040 PLA 50 PLA 60 l\10 ;SOURCE.09920 ;PEEKS A 2 BYTE LOW/HIGH VALUE AND RETURNS THE ADDRESS IN THE RETURN VARIABLE.30 *= $060040 MEM qP}= $CB50 ADDRESS = $D4 ;ANSWER IN RETURN VARIABLE60 PLA 70 PLA 80 PLA 90 STA MEM ;LO OFqQ} 2 BYTE MEMORY TO PEEK0100 LDY #00110 STY MEM+10120 LDA (MEM),Y ;VALUE OF PEEK(LO)0130 STA ADDRESS0140 qR} INY 0150 LDA (MEM),Y0160 STA ADDRESS+10170 RTS LDA (MEM),Y ;VALUE OF PEEK(LO)0130 STA ADDRESS0140 pB10 ; SOURCE.10020 ;POKES AN ADDRESS INTO A 2 BYTE ADDRESS.30 *= $060040 MEM = $CB50 PLA 60 PLA 7uT}0 STA MEM+1 ;WILL BE '0' SINCE THIS ROUTINE ONLY FOR PAGE ZERO80 PLA 90 STA MEM ;MEMORY LO BYTE010uU}0 LDY #1 ;HI BYTE OF MEMORY DESIRED0110 PLA 0120 STA (MEM),Y0130 DEY 0140 PLA 0150 STA (MEMuV}),Y ;LO BYTE0160 RTS OF MEMORY DESIRED0110 PLA 0120 STA (MEM),Y0130 DEY 0140 PLA 0150 STA (MEMt10 ;SOURCE.101 LINE 1020 ;START THE TIMER.30 *= $060040 RTCLOK = 1950 PLA 60 LDA #070 STA RTyX}CLOK+180 STA RTCLOK90 LOOP LDA RTCLOK0100 BNE LOOP0110 RTS 50 PLA 60 LDA #070 STA RTxO10 ;SOURCEA.10120 ;TIMER OFF.30 *= $060040 RTCLOK = 1950 JIFFY = $D460 PLA 70 LDA RTCLOK+180 }Z} STA JIFFY90 LDA RTCLOK0100 STA JIFFY+10110 RTS JIFFY = $D460 PLA 70 LDA RTCLOK+180 |D10 ; SOURCE.10220 ;DELAY LOOP. TAKES UP TO 255 INPUTED NUMBER.30 *= $060040 RTCLOK = 2050 COUNT = $CB60 \} PLA 70 PLA 80 PLA 90 STA COUNT0100 LDA #00110 STA RTCLOK ;SET INTERNAL CLOCK0120 LOOP ]}LDA RTCLOK0130 BNE LOOP ;SETS TO 0 AT VBI0140 LOOP1 LDA RTCLOK0150 CMP COUNT0160 BNE LOOP10170 RTS |10 ;SOURCE.103 LINE 1020 ;DISABLES THE BREAK KEY30 *= $060040 PLA 50 LDA #11260 STA 1670 _} STA 5377480 RTS ;DISABLES THE BREAK KEY30 *= $060040 PLA 50 LDA #11260 STA 1670 10 ; SOURCEA.10320 ;ABLES THE BREAK KEY30 *= $060040 PLA 50 LDA #19260 STA 1670 LDA #247a}80 STA 5377490 RTS AK KEY30 *= $060040 PLA 50 LDA #19260 STA 1670 LDA #247"10 ;SOURCE.10420 ;TURNS SOUND OFF IN ALL FOUR CHANNELS.30 *= $060040 AUDF1 = 5376050 PLA 60 LDY #8c}70 LDA #080 LOOP STA 53760,Y ;SOUND CHANNELS90 DEY 0100 BPL LOOP0110 RTS PLA 60 LDY #8c10 ; SOURCE.105 LINE 30 OR 6020 ;CODES OR DECODES A STRING OF 255 MAX LENGTH.30 *= $060040 ADRS = $CB50 LEN e} = $CD60 CODE = $CF70 PLA 80 PLA 90 STA ADRS+10100 PLA 0110 STA ADRS ;STRING ADDRESSf}0120 PLA 0130 PLA 0140 STA LEN0150 PLA 0160 PLA 0170 STA CODE ;SEED NUMBER TO DECODE WITH018g}0 LDY #00190 LDX LEN ;PARTIAL PAGE0200 BEQ DONE ;NO LENGTH0210 GT1 LDA (ADRS),Y0220 EOR CODE0230 q}BSOURCEB 084BSOURCEC 084B"SOURCE 085B 0SOURCEA 085B ;SOURCEB 085B ESOURCEC 085B PSOURCED 085B ZSOURCE 086'r1B1  ~ Q   $  b ~ B!SOURCEA 091B SOURCE 092B SOURCEA 092BSOURCE 093B "SOURCEA SRCB+SOURCE 094B2SOURCEA 094B9SOURCE 095B?SOURCE 096BCSOURCEA 096BHSOURCE 097BMSOURCE 098BOSOURCE 099BSSOURCE 100BWSOURCE 101BYSOURCEA 101B[SOURCE 102B^SOURCE 103B`SOURCEA 103BbSOURCE 104BdSOURCE 105BrSOURCEA 105BySOURCE 106B~SOURCE 107B SOURCEA 107BSOURCE 108B SOURCEA 108B SOURCE 109BSOURCE 110BSOURCE 111BSOURCE 112BSOURCE 113BSOURCE 114BSOURCE 115BSOURCE 116BSOURCE 117BSOURCE 118BSOURCE 119BSOURCE 120B%DOS SYSB*DUP SYSBmDEMO SRC STA (ADRS),Y0240 INY 0250 DEX 0260 BNE GT10270 DONE RTS TH0210 GT1 LDA (ADRS),Y0220 EOR CODE0230 M10 ;SOURCEA.105 LINE 11020 ;CODES OR DECODES A STRING, ANY LENGTH.30 *= $060040 ADRS = $CB50 LEN = $CD60s} CODE = $CF70 PLA 80 PLA 90 STA ADRS+10100 PLA 0110 STA ADRS ;STRING ADDRESS0120 PLt}A 0130 STA LEN+10140 PLA 0150 STA LEN0160 PLA 0170 PLA 0180 STA CODE ;SEED NUMBER TO DECODE u}WITH0190 LDY #00200 LDX LEN+1 ;DO FULL PAGES FIRST0210 BEQ GT20220 GT3 LDA (ADRS),Y ;GET CHARACTER0230 v} EOR CODE ;EXCLUSIVE 'OR' FOR DECODE0240 STA (ADRS),Y ;REPLACE IT0250 INY 0260 BNE GT30270 INC ADRS+1w}0280 DEX 0290 BNE GT30300 GT2 LDX LEN ;DO PARTIAL PAGE0310 BEQ DONE0320 GT4 LDA (ADRS),Y0330 EOR CODx}E0340 STA (ADRS),Y0350 INY 0360 DEX 0370 BNE GT40380 DONE RTS NE0320 GT4 LDA (ADRS),Y0330 EOR CODT10 ; SOURCE.10620 ;DECIMAL TO BINARY CONVERSION30 *= $060040 STGADR = $CB ;OUTPUT FOR BINARY NUMBER50 NUM =z} $CD ;WORKING NUMBER60 PLA 70 PLA 80 PLA 90 STA NUM ;DECIMAL TO CONVERT0100 PLA 0{}110 STA STGADR+10120 PLA 0130 STA STGADR ;OUTPUT STRING ADDRESS0140 LDY #70150 LOOP LSR NUM ;PUT LOWE|}ST BIT INTO CARRY0160 BCS ONE ;'1'0170 LDA #480180 BNE ZERO0190 ONE LDA #490200 ZERO STA (STGADR),Y0210}} DEY 0220 BPL LOOP0230 RTS '0170 LDA #480180 BNE ZERO0190 ONE LDA #490200 ZERO STA (STGADR),Y0210*10 ; SOURCE.107 LINE 4020 ;DECIMAL TO HEX CONVERSION, 255 MAX30 *= $060040 HEXADR = $CB ;OUTPUT FOR HEX NUMB}ER. STRING MUST BE SET IN BASIC AS "$ ".50 NUM = $CD ;WORKING NUMBER60 TEMP = $CE70 PLA 80 PLA }90 PLA 0100 STA NUM ;DECIMAL TO CONVERT0110 PLA 0120 STA HEXADR+10130 PLA 0140 STA HEXADR } ;OUTPUT STRING ADDRESS0150 LDA #2 ;LOCATION WITHIN OUTPUT STRING0160 STA TEMP0170 LDA NUM0180 AND #}OP E]EEEr 0220 ADC #55 ;10 BECOMES 65 OR 'A' IN ATASCII0230 BCC GT30240 GT2 CLC 0250 ADC #48 ;TO ATASCII0260 }GT3 LDY TEMP0270 STA (HEXADR),Y ;ANSWER STRING0280 DEC TEMP0290 BEQ DONE0300 LDA NUM0310 LSR A0320 } LSR A0330 LSR A ;PUT HI NIBBLE TO LO NIBBLE0340 LSR A0350 CLC 0360 BCC GT10370 DONE RTS 0320 x10 ; SOURCEA.107 LINE 8020 ;DECIMAL TO HEX CONVERSION UP TO 65535.30 *= $060040 HEXADR = $CB ;OUTPUT FOR HEX} NUMBER. STRING MUST BE SET IN BASIC AS "$XXXX".50 NUM = $CD ;WORKING NUMBER60 TEMP = $CF70 PLA 80 } PLA 85 STA NUM+190 PLA 0100 STA NUM ;DECIMAL TO CONVERT0110 PLA 0120 STA HEXADR+10130 } PLA 0140 STA HEXADR ;OUTPUT STRING ADDRESS0150 LDX #2 ;COUNTER0160 LDA #40170 GT4 STA TEMP ;LOCATIO}N WITHIN OUTPUT STRING. START AT END OF HEX STRING0180 LDA NUM0190 AND #15 ;CLEAR HI NIBBLE AND WORK ON LOW NI}BBLE0200 GT1 CMP #10 ;IN CASE NEED A-F CHARACTER0210 BCC GT20220 CLC 0230 ADC #55 ;10 BECOMES 65 OR '}A' IN ATASCII0240 BCC GT30250 GT2 CLC 0260 ADC #48 ;TO ATASCII0270 GT3 LDY TEMP0280 STA (HEXADR),Y ;ANSW}ER STRING0290 DEC TEMP0300 DEX 0310 BEQ NEXT0320 LDA NUM0330 LSR A0340 LSR A0350 LSR A } ;PUT HI NIBBLE TO LO NIBBLE0360 LSR A0370 CLC 0380 BCC GT10390 NEXT LDA TEMP0400 BEQ DONE0410 LD}A NUM+10420 STA NUM ;WORK ON HI BYTE0430 LDA #20440 TAX 0450 BNE GT40460 DONE RTS DONE0410 LDl10 ; SOURCE.108 LINE 3020 ;HEX TO DECIMAL CONVERSION, MAX. HEX NUMBER IS $FF.30 *= $060040 HEXADR = $CB50 NUM} = $D4 ;WORK AREA AND FINAL ANSWER60 PLA 70 PLA 80 STA HEXADR+190 PLA 0100 STA HEXAD}R ;ADDRESS OF INPUTED HEX NUMBER0110 LDA #00120 STA NUM+10130 STA NUM0140 LDX #2 ;A COUNTER FOR NIB}BLES CONVERTED0150 LDY #0 ;2 BYTES IN HEX STRING0160 LOOP LDA (HEXADR),Y0170 CMP #65 ;'A' IN ATASCII0180} BCC GT1 ;48 TO 57 FOR 0-90190 SBC #55 ;'A' BECOMES 10,ECT0200 BCS GT20205 GT1 SEC 0210 SBC #48 } ;TO ARRIVE AT 0-90220 GT2 ORA NUM0230 STA NUM0240 INY 0250 DEX 0260 BEQ DONE ;BOTH NIBBLES DONE02}70 ASL NUM0280 ASL NUM0290 ASL NUM0300 ASL NUM ;PLACE IN HI BYTE0310 CLC 0320 BCC LOOP0330 }DONE RTS NUM0280 ASL NUM0290 ASL NUM0300 ASL NUM ;PLACE IN HI BYTE0310 CLC 0320 BCC LOOP0330 10 ; SOURCEA.108 LINE 7020 ;HEX TO DECIMAL CONVERSION, MAX. HEX NUMBER IS $FFFF.30 *= $060040 HEXADR = $CB50 NU}M = $D4 ;WORK AREA AND FINAL ANSWER60 TEMP = $CD NAL ANSWER70 PLA 80 PLA 90 STA HEXADR+1}ɛ ĢɛК  ܩ8IȢ z Щ $P) 8孨客 $ L` L`DX #2 ;COUNTER FOR BOTH NIBBLES0140 LDA #00150 STA TEMP0160 LOOP LDA (HEXADR),Y0170 CMP #65 ;'A' IN }ATASCII0180 BCC GT1 ;48 TO 57 FOR 0-90190 SBC #55 ;'A' BECOMES 10,ECT0200 BCS GT20205 GT1 SEC 0210 } SBC #48 ;TO ARRIVE AT 0-90220 GT2 ORA TEMP0230 STA TEMP0240 DEX 0250 BEQ NEXT ;NEXT TWO BYTES0260 } INY 0270 ASL TEMP0280 ASL TEMP0290 ASL TEMP0300 ASL TEMP ;PLACE IN HI BYTE0310 CLC 0320 }BCC LOOP0330 NEXT CPY #1 ;FIRST TIME Y IS 30340 BEQ DONE0350 STA NUM0360 LDY #0 ;FIRST HEX CHARACTER}0370 BEQ GT00380 DONE STA NUM+1 ;HI BYTE0390 RTS DONE0350 STA NUM0360 LDY #0 ;FIRST HEX CHARACTER>ei8`Ū߱08§REŧDATINPUԷCOLO,LISENTEҺLEԎI̦FONEXԷGOTϷGO TϷGOSU·TRAиBYŸCONY ;INCOMING HEX NUMBER50 NUM = $D4 ;WORK AREA60 BINADR = $CD ;WHERE TO PUT FINAL BINARY NUMBER IN STRING FORM7}0 PLA 80 PLA 90 STA HEXADR+10100 PLA 0110 STA HEXADR ;ADDRESS OF INPUTED HEX NUMBER0120 L}DA #00130 STA NUM+10140 STA NUM0150 LDX #2 ;A COUNTER FOR NIBBLES CONVERTED0160 LDY #0 ;2 BYTES} IN HEX STRING0170 LOOP LDA (HEXADR),Y0180 CMP #65 ;'A' IN ATASCII0190 BCC GT1 ;48 TO 57 FOR 0-90200 }SBC #55 ;'A' BECOMES 10,ECT0210 BCS GT20220 GT1 SEC 0230 SBC #48 ;TO ARRIVE AT 0-90240 GT2 ORA NUM0250 } STA NUM0260 INY 0270 DEX 0280 BEQ NEXT ;BOTH NIBBLES DONE0290 ASL NUM0300 ASL NUM0310 ASL} NUM0320 ASL NUM ;PLACE IN HI BYTE0330 CLC 0340 BCC LOOP0350 ;NEXT ROUTINES CONVERT DECIMAL TO BINARY NUM}BER STRING0360 NEXT PLA 0370 STA BINADR+1 ;GET LOCATION OF BINARY ADDRESS0380 PLA 0390 STA BINADR0400 LD}Y #70410 LOOP1 LSR NUM0420 BCS ONE0430 LDA #48 ;ZERO0440 BNE ZERO0450 ONE LDA #490460 ZERO STA (BINADR)},Y0470 DEY 0480 BPL LOOP10490 RTS LDA #48 ;ZERO0440 BNE ZERO0450 ONE LDA #490460 ZERO STA (BINADR)210 ; SOURCE.11020 ;BINARY CONVERSION TO DECIMAL30 *= $060040 BINADR = $CB ;INPUT BINARY NUMBER FROM A STRING5}0 NUM = $D4 ; BINARY STRING TO BINARY NUMBER60 TEMP = $D070 PLA 80 LDA #190 STA TEMP ;FI}RST USE A TEMPORARY NUMBER TO BUILD THE BINARY NUMBER OUT OF0100 PLA 0110 STA BINADR+10120 PLA 0130 STA B}INADR0140 LDA #00150 STA NUM+1 ;CLEAR HI BYTE0160 STA NUM ;ANSWER0170 LDY #7 ;8 BITS0180 LOOP} LDA (BINADR),Y ;GET ONE OF THE BINARY STRING CHARACTERS0190 CMP #48 ;'0' IN ATASCII0200 BEQ SKIP0210 LDA }TEMP0220 CLC 0230 ADC NUM0240 STA NUM ;BINARY NUMBER BEING BUILT0250 SKIP ASL TEMP ;PLACE THE '1' IN TH}E APPROPRIATE BIT LOCATION0260 DEY 0270 BPL LOOP0280 RTS EING BUILT0250 SKIP ASL TEMP ;PLACE THE '1' IN THI10 ;SOURCE.11120 ;BINARY CONVERSION TO HEX30 *= $060040 BINADR = $CB ;INPUT BINARY NUMBER FROM A STRING50 HEX}ADR = $CD ;STRING TO PUT HEX ANSWER, MUST BE A LENGTH OF THREE60 NUM = $D4 ;BINARY NUMBER WILL ALSO BE CONVERTE}D TO DECIMAL IN THE RETURN VARIABLE70 TEMP = $D080 PLA 90 LDA #10100 STA TEMP ;FIRST USE A TEMPORAR}Y NUMBER TO BUILD THE BINARY NUMBER OUT OF0110 PLA 0120 STA BINADR+10130 PLA 0140 STA BINADR0150 PLA} 0160 STA HEXADR+10170 PLA 0180 STA HEXADR ;ANSWER0190 LDA #00200 STA NUM+1 ;CLEAR HI BYTE0210 } STA NUM ;BINARY NUMBER FROM STRING TO BINARY NUM0220 LDY #7 ;8 BITS0230 LOOP LDA (BINADR),Y ;GET ONE OF THE} BINARY STRING CHARACTERS0240 CMP #48 ;'0' IN ATASCII0250 BEQ SKIP0260 LDA TEMP0270 CLC 0280 ADC} NUM0290 STA NUM ;BINARY NUMBER BEING BUILT0300 SKIP ASL TEMP ;PLACE THE '1' IN THE APPROPRIATE BIT LOCATION0310} DEY 0320 BPL LOOP0330 ;NOW MAKE THE HEX NUMBER FROM THE TWO NIBBLES OF THE BINARY NUMBER IN 'NUM'0340 LDA #2}0350 STA TEMP ;NOW USE AS STRING LOCATION FOR ANSWER WHICH IS IN THE FORM OF HEX '$XX'0360 LDA NUM0370 AND #}Յ ૥Ԡ``  ͫդԅ`H 󥋅 h / - - - -I&00400 CLC 0410 ADC #55 ;10 BECOMES 65 OR 'A' IN ATASCII0420 BCC GT70430 GT5 CLC 0440 ADC #48 ;TO }ATASCII0450 GT7 LDY TEMP0460 STA (HEXADR),Y ;ANSWER STRING0470 DEC TEMP0480 BEQ DONE0490 LDA NUM0500 } LSR A0510 LSR A0520 LSR A0530 LSR A ;PUT HI NIBBLE TO LO NIBBLE0540 CLC 0550 BCC GT60560 DO}NE RTS 0510 LSR A0520 LSR A0530 LSR A ;PUT HI NIBBLE TO LO NIBBLE0540 CLC 0550 BCC GT60560 DO10 ; SOURCE.11220 ;FLIPS BIT STATUS OF NUMBER IN A MEMORY ADDRESS.30 *= $060040 LOC = $CB50 PLA 60 } PLA 70 STA LOC+180 PLA 90 STA LOC ;LOCATION OF BYTE TO CHANGE0100 PLA 0110 PLA 0120 }6 Eƨ إ󅕥 gL a" a Ư" L8 > c=Š) 죰 L樤ħ`hh` >L DEX 0180 BPL LOOP ;PUT A '0' IN CORRECT LOCATION FOR NUMBER TO 'EOR' MEMORY LOCATION WITH0190 EOR (LOC),Y ;N}EW NUMBER0200 STA (LOC),Y ;REPLACE OLD NUMBER0210 RTS NUMBER TO 'EOR' MEMORY LOCATION WITH0190 EOR (LOC),Y ;NA10 ;SOURCE.11320 ;FLIPS BIT STATUS OF DIRECT INPUT NUMBER.30 *= $060040 NUM = $D450 PLA 60 PLA }70 PLA 80 STA NUM ;NUMBER90 PLA 0100 PLA 0110 TAX ;BIT TO FLIP, 0-70120 LDA #0}0130 STA NUM+1 ;CLEAR HI BYTE0140 SEC ;PUT A '1' IN CARRY0150 LOOP ROL A0160 DEX 0170 BPL LOOP} ;PUT A '1' IN CORRECT LOCATION FOR NUMBER TO 'EOR' MEMORY LOCATION WITH0180 EOR NUM ;NEW NUMBER0190 STA NUM} ;REPLACE OLD NUMBER0200 RTS NUMBER TO 'EOR' MEMORY LOCATION WITH0180 EOR NUM ;NEW NUMBER0190 STA NUM'10 ; SOURCE.11420 ;SET BIT TO 1 OF NUMBER IN A MEMORY ADDRESS.30 *= $060040 LOC = $CB50 PLA 60 PL}A 70 STA LOC+180 PLA 90 STA LOC ;LOCATION OF BYTE TO CHANGE0100 PLA 0110 PLA 0120 TAX} ;BIT TO SET, 0-70130 LDA #00140 TAY 0150 SEC ;PUT A '1' IN CARRY0160 LOOP ROL A0170 DEX} 0180 BPL LOOP ;PUT A '1' IN CORRECT LOCATION FOR NUMBER TO 'ORA' MEMORY LOCATION WITH0190 ORA (LOC),Y ;NEW NUMB}ER0200 STA (LOC),Y ;REPLACE OLD NUMBER0210 RTS NUMBER TO 'ORA' MEMORY LOCATION WITH0190 ORA (LOC),Y ;NEW NUMB:10 ; SOURCE.11520 ;SETS BIT TO 1, DIRECT NUMBER INPUT30 *= $060040 NUM = $D450 PLA 60 PLA 70 } PLA 80 STA NUM ;NUMBER90 PLA 0100 PLA 0110 TAX ;BIT TO SET, 0-70120 LDA #00130 } STA NUM+10140 SEC ;PUT A '1' IN CARRY0150 LOOP ROL A0160 DEX 0170 BPL LOOP ;PUT A '1' IN CORREC}T LOCATION FOR NUMBER TO 'ORA' MEMORY LOCATION WITH0180 ORA NUM ;NEW NUMBER0190 STA NUM ;REPLACE OLD NUMBER}0200 RTS NUMBER TO 'ORA' MEMORY LOCATION WITH0180 ORA NUM ;NEW NUMBER0190 STA NUM ;REPLACE OLD NUMBER10 ; SOURCE.11620 ;CLEARS A BIT OF A NUMBER IN MEMORY30 *= $060040 LOC = $CB50 PLA 60 PLA 70 } STA LOC+180 PLA 90 STA LOC ;LOCATION OF BYTE TO CHANGE0100 PLA 0110 PLA 0120 TAX };BIT TO CLEAR, 0-70130 LDY #00140 LDA #255 ;111111110150 CLC ;PUT A '0' IN CARRY0160 LOOP ROL A01}70 DEX 0180 BPL LOOP ;PUT A '0' IN CORRECT LOCATION FOR NUMBER TO 'AND' MEMORY LOCATION WITH0190 AND (LOC),Y} ;NEW NUMBER0200 STA (LOC),Y ;REPLACE OLD NUMBER0210 RTS NUMBER TO 'AND' MEMORY LOCATION WITH0190 AND (LOC),YD10 ; SOURCE.11720 ;CLEARS A BIT OF DIRECT INPUT NUMBER.30 *= $060040 NUM = $D450 PLA 60 PLA 70 } PLA 80 STA NUM ;NUMBER90 PLA 0100 PLA 0110 TAX ;BIT TO CLEAR, 0-70120 LDA #001}30 STA NUM+1 ;CLEAR HI BYTE0140 LDA #255 ;111111110150 CLC ;PUT A '0' IN CARRY0160 LOOP ROL A017}0 DEX 0180 BPL LOOP ;PUT A '0' IN CORRECT LOCATION FOR NUMBER TO 'AND' MEMORY LOCATION WITH0190 AND NUM };NEW NUMBER0200 STA NUM ;REPLACE OLD NUMBER0210 RTS NUMBER TO 'AND' MEMORY LOCATION WITH0190 AND NUM C10 ; SOURCE.11820 ;READS STATUS OF A BIT OF A NUMBER IN MEMORY.30 *= $060040 LOC = $CB50 RETVAR = $D460 } PLA 70 PLA 80 STA LOC+190 PLA 0100 STA LOC ;LOCATION OF BYTE TO CHANGE0110 PLA 0120 } PLA 0130 TAX ;BIT TO READ, 0-70140 LDY #00150 STY RETVAR+10160 LDA (LOC),Y ;GET NUMBER0170 LOOP} DEX 0180 BMI DONE0190 ROR A ;GET DESIRED BIT INTO '0' LOCATION0200 CLC 0210 BCC LOOP0220 DONE AND} #1 ;CLEAR ALL BITS EXCEPT FIRST ONE0230 STA RETVAR0240 RTS TION0200 CLC 0210 BCC LOOP0220 DONE ANDK10 ; SOURCE.11920 ;READS STATUS OF A BIT OF A DIRECT INPUT NUMBER.30 *= $060040 NUM = $D450 PLA 60 } PLA 70 PLA 80 STA NUM ;NUMBER90 PLA 0100 PLA 0110 TAX ;BIT TO READ, 0-70120 } LDY #00130 STY NUM+10140 LDA NUM0150 LOOP DEX 0160 BMI DONE0170 ROR A ;GET DESIRED BIT INTO '0' L}OCATION0180 CLC 0190 BCC LOOP0200 DONE AND #1 ;CLEAR ALL BITS EXCEPT FIRST ONE0210 STA NUM0220 RTS }10 ; SOURCE.12020 ;PLACES GR.0 SIZE TEXT ON GR.8 PICTURE SCREEN.30 *= $060040 CHBAS = 75650 SCN = $CB6}0 CHAR = $CD70 HOLD = $CF80 PLA 90 CLC 0100 PLA ;HI OF 0 TO 7680 FOR PLACE ON SCREEN0110 } ADC 89 ;HI OF SCN ADDRESS0120 STA SCN+10130 CLC 0140 PLA ;LO ON PLACE ON SCREEN0150 ADC 8}8 ;LO OF SCN ADDRESS0160 STA SCN0170 LDA SCN+10180 ADC #00190 STA SCN+1 ;FIX HI BYTE IF NECESSARY}0200 LDA CHBAS0210 STA CHAR+1 ;PUT HI BYTE OF CHBAS IN CHAR+10220 PLA 0230 PLA ;0-255 ATASCII NUM}BER OF KEYBOARD INPUT0240 BPL GT4 ;IF 0-1270250 LDX #1 ; 128 TO 255 WHICH IS INVERSE CHARACTER SO SET X AS} FLAG0260 SEC 0270 SBC #128 ;TO 0-1270280 GT4 STA CHAR ;0 TO 127 ATASCII NUMBER0290 AND #224 ;111000}000300 BNE GT1 ;IF WAS >310310 LDA CHAR0320 CLC 0330 ADC #64 ;NO. WAS 0-32 SO CORRECT TO DISPLAY }NO.0340 BNE G00350 GT1 LDA CHAR ;>310360 AND #96 ;011000000370 CMP #960380 BEQ G3 ;IF WAS >9}50390 LDA CHAR ;NO. WAS 32-95 SO CORRECT TO DISPLAY NO.0400 SEC 0410 SBC #320420 G0 STA CHAR ;CORRECT }DISPLAY NO.. IF INVERSE THEN X=10430 G3 LDA CHAR0440 CLC 0450 ASL A0460 ASL A0470 BCS G20480 GT8 ASL A} ;NOW IS x8 OR WHERE CHAR STARTS IN CHBAS0490 BCS GT90500 G1 STA CHAR0510 LDY #00520 GT6 LDA (CHAR),Y ;FIR}ST LINE OF CHARACTER IN CHBAS0530 INY ;1,2,3...80540 STY HOLD0550 CPX #10560 BEQ GT5 ;IF INVE} } LINE OF CHARACTER0600 CLC 0610 ADC #400620 STA SCN0630 LDA SCN+10640 ADC #00650 STA SCN+10660} LDY HOLD0670 CPY #80680 BNE GT60690 RTS 0700 GT5 EOR #2550710 CLC 0720 BCC GT70730 G2 INC CH}AR+10740 INC CHAR+10750 CLC 0760 BCC GT80770 GT9 INC CHAR+10780 CLC 0790 BCC G1GT70730 G2 INC CHjd M * @  $ % CC$$)%1 Udߥ$9%: !0 S$%} DD˙`  }J)Lr J  ((  p L ()   J}L= ( L 0q A    IB JC;? D W } LL  ` W )LA!  ߰")-݆ p" } $G@LL 08`Q")<2Q0 -G$Ș݆ UL# ; p8(()(0ʥ)NQ`}$GȘ݆LU )L ݆ L GȘ ݆LL )W>Z   HH)H }p h  hyhy D L> L JJ    ! LA*` BF}7'8  M HN H` 8 Z  \LdJJ!"! GFE@F (!L}EE !E^ ^ E E7EȩEdE/EȩE  D} .L }  ;F d  ;?F7F? ( .   Z D LL d } . D  L    p  E` , d)  D L) 0BM݊L݉} ML  N݆ L NLML [ TEqEHȱEqEh 0Gȹ G} HLL GɛL  LFREE SECTORS G) *Gȩ GȽG GȌ*jj >G} C8jJ3j2CD( C202C ԠBX` N 1? l LlD:RAMDISK}.COMLu L1 L ;LHL  T`  `1  ɐ     `TU } L ? .  t`GBJ ~DEHI B V0dV}QDEHI VF9 ,0 ,0 s0hhL  L` H hDHEh}DEL8HI4 0 HI,0 0  9 .G VLO},0 L4*IJ`llD1:AUTORUN.SYSNEED MEM.SAV TO LOAD THIS FILE.D1:MEM.SAV J y08 B|DEHI} V0 0`B;DEL`?<0LV`@ʆ v s? F0Ξ05: [ BDEHI} VY8 B V  @  /DE `E:D1:DUP.SYSERROR-SAVING USER MEMORY ON DISKTYPE Y TO }STILL RUN DOS B;DE J  (` 9 V⪍ ઍ  -}LLu ÝDEHILV 9 .l 9 .l  `` s$B BH}I|DE V BLV nB,DE JLV B V BLVDEIʩ BꭝLu } 3E:}DISK OPERATING SYSTEM II VERSION COPYRIGHT 1984 ATARI CORP.A. DISK DIRECTORY I. FORMAT DISKB. RUN CARTRIDG }E J. DUPLICATE DISKC. COPY FILE K. BINARY SAVED. DELETE FILE(S) L. BINARY LOADE. RENAME FILE M. RUN AT ADDRES!}SF. LOCK FILE N. CREATE MEM.SAVG. UNLOCK FILE O. DUPLICATE FILEH. WRITE DOS FILES P. FORMAT SINGLEL !N'"}#"&))9(&*)/h)''-&؆莟R'S  vL/ˢ L }Insert DOS 2.0s, type Y Λx #}DEfHI 1莏#q! @ y0ɛ8A0,' ȅ 1 1ild! 1L!NO SUCH ITEMSELECT$} ITEM OR FOR MENU! 0 .z:*{}.|{ 1 0 0JB 18L%|DL%}%DIRECTORY--SEARCH SPEC,LIST FILE?[# 0 0 &|D3" 1L!NOT A DISK FILEN !B 1L!E# 1 !BD&}ED:}:1BJ|DE 1DEBHI 1 h0ߢ 0.'}  0?詛 1 y0YЛ 1 ;#L" ;#L! BL1TYPE "Y" TO DELETE...DELETE FILE SPEC(}COPY--FROM, TO?OPTION NOT ALLOWED697 FREE SECTORS COPYING---D8:COPY32.COMl# 0|D .L/%#)}##JB|DE 1BHID#E 1#0: B 1L!#͑### B 1#c$0SY*}S1}:## # # .#Ƚ# # 𩛙## 1,#PD#ELJ- <.BJD#E +}1 1HH 0hh|DL%1}:̳# L% #D#EL% 1 0 . .0O% 1L!WILD CARDS NOT A,}LLOWED IN DESTINATION 0 <.|K},^ 1 70 0L#L!-* 1P* 1 y0Yj383}mm ݭ?}}`8}``|* ? ɛ,`|:-)| / 1L!`DESTINATION CANT BE DO@}S.SYS0 0H{ 24Δ 28/L!/) 2 Π 2 0 ξA}hAΞB,0 J 1 BDEHI,HÝDE 1HIHIDELSAVE-GIVE B}FILE,START,END(,INIT,RUN)O S0 1`BDEPHI V` S0H 1 L!C}0 0 1L~0`PLEASE TYPE 1 LETTER,0`hhL! 70 1L0L<1 ,;ɛ7,"ɛ:ݦ1ݥD}A"D|ݤD|ȩ:|ȩ|ɛ,,(/+.ީ1 1,ɛ`轤{NAMEE} TOO LONG B VL!` L1I H1EΝDL1|mDiE` V0`8d/8 i:222 1 LF}!ERROR- 144ɛ+,' 20*.. өr2 1``2TOO MANY DIGITSINVALID HEXAG}DECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8uH} ECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8u HEXADECIMAL PARAMETER800 0 8 00`,0'D800H,ɛh`2L1NEED D1 THRU D4CJ} $;CC $;C $;CC 8C Z: *DCC ,=  , lɀL +K}CCC.LE4 k:泭C0iiCLg3CL<3 Z: *DCC ,=  , /,C0 8L} l0N S0G :CC# k:浭C0iiCЪL<3 ,٢=  * q;L8 D, q; $; ,WC M} L 4C>  :A>810CC ,/> 1C1>  :Z>810CC ,C> 1CCC , 1= 1 :YhN}hL `=CCЍCCCCCCCCC ; ; ; , 4L3 ,\> 1 * 鈹CɛሢCɛ )CC0O}CC ~* 5CCCC Co> 1 * Cɛ ~* 5ܭCCCC C˭CCLE5CCLE5`C`P}`C`~, , E5C 4L3? , E5CC 4C $;D浭CC 8CCCBCQ} lɀYC :L6 : lC񠀈Ѱиi iACCC k:LX6CCCCC qR};L8= ; , ,p  , ,  ,1@  :ɛL 15))C q+L 7= , ,V@  ,u@  :ɛL H 7 S}7Lj7 7Lj7D 8 7L7 7L7բ@ `ߢC ` ,@  * ECɛ>0$C *00C0C *0" CCLT}7`C X*`8` ,@  *0\X TCɛM ~*HC)JJJJ *6CȽC) *(CC0CCU}C`8`=8W=Wy 8W=PyL5 ON ,C` ; *nDEǍHI 1C L!9 :C V}q+L8L 9 q;L8P 9 q;L8W +L8ML 15))C g+L8 ,C&D?E BHCCC /,C\W}XCC X*C-?0  -?C0L8:8鉍C mC mCE?1?C V0*CCC LW9C? X}`CL09PC B VB DAEJNK V0 09 ,ʢ? PC D,P B V`CC mC mC?1?L9Y}CC`i`i`i`i`i`P BZ} VBDAEJ VBHIL1HI B} V@`HS S ShH )Lc;Lj;h` 0)¢[})  q; ,` M;hL$; b,hL$; ,>  , ,L,=L1 :HOh:` ; 0L>!}DISK UTILITIES (c)1983 Atari V\}er 2.6f MODIFIED FOR ATARI 800 USEA. DISK DIRECTORY K. BINARY SAVEB. RUN CARTRIDGE L. BINARY LOADC. COPY FILE ]}M. RUN AT ADDRESSD. DELETE FILE N. CREATE MEM.SAVE. RENAME FILE O. DUPLICATE FILEF. LOCK FILE P. COPY SECTORSG^}. UNLOCK FILE Q. CHECK SECTORSH. WRITE DOS/DUP R. RADIX CONVERTI. FORMAT DISK S. DRIVE SPEEDJ. DUPLICATE DISK T. WR_}ITE VERIFY:ƛ9!&x#!7&p))'&5./)L''-66C76u8COPY DISK Insert source disk and Λ Insert DESTINATION `}disk and Λ IT'S DONE !'Y' to execute or for menuSource drive # ?DESTINATION drive # ?Source drive is # 1Desa}tination drive is # 1Enter first sectorEnter last sectorCHECK DRIVE # 1 >>>>ERROR # 138<<<q98 ?C7=Cs;: A9Bt